package com.zqq.glide.touchView;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.LinearLayout;

/**
 * 自定义view检查touch事件
 *
 * @author zqq on 2018/7/16
 */
public class LayoutView2 extends LinearLayout {

    private final String TAG = "Tag--";

    public LayoutView2(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true，
     * 那么后续的move, up等事件将不再传递给onInterceptTouchEvent()，而是和down事件一样传递给该ViewGroup的onTouchEvent()处理，
     * 注意，目标view将接收不到任何事件。
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                Log.e(TAG, "LayoutView22 Intercept DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.e(TAG, "LayoutView22 Intercept MOVE");
                break;
            case MotionEvent.ACTION_UP:
                Log.e(TAG, "LayoutView22 Intercept UP");
                break;
            case MotionEvent.ACTION_CANCEL:
                Log.e(TAG, "LayoutView22 Intercept CANCEL");
                break;
            default:
                break;
        }
        return false;
    }

    /**
     * 1.如果最终需要处理事件的view的onTouchEvent()返回了false，
     *      那么该事件将被传递至其上一层次的view的onTouchEvent()处理。且后续不会再有操作如MOVE、UP等。
     * 2.如果最终需要处理事件的view 的onTouchEvent()返回了true，
     *      那么后续事件将可以继续传递给该view的onTouchEvent()处理，如MOVE、UP等。
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                Log.e(TAG, "LayoutView22 Touch DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.e(TAG, "LayoutView22 Touch MOVE");
                break;
            case MotionEvent.ACTION_UP:
                Log.e(TAG, "LayoutView22 Touch UP");
                break;
            case MotionEvent.ACTION_CANCEL:
                Log.e(TAG, "LayoutView22 Touch CANCEL");
                break;
            default:
                break;
        }
        return false;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.e(TAG, "LayoutView2  dispatch   ");
        boolean r = super.dispatchTouchEvent(ev);
        Log.e(TAG, "LayoutView2  dispatch 结果   " + r);
        return r;
    }

}
